/**
 *
 * @description:用户注册、登录、退出、获取指定文章的所有评论、提交评论
 * @author:junyong.hong
 * @createTime:2018/1/8
 * @version:1.0.0.0
 * @history:
 *    1、
 *    2、
 *
 */
var express = require('express');
var router = express.Router();
var User = require('../models/User');//用户
var Content = require('../models/Content');//文章
var Message = require('../models/Message');//留言

//统一返回格式
var responseData;

router.use(function (req,res,next) {
    responseData = {
        code:0, //0代表没有错误
        message:''
    };
    next();
});


/**
 * 用户注册
 *
 *  1、用户名不能为空
 *  2、密码不能为空
 *  3、两次输入的密码必须一致
 *
 *  1、用户是否已经被注册了
 *      数据库查询
 *
 */
router.post('/user/register',function (req,res,next) {
    var username = req.body.username;
    var password = req.body.password;
    var repassword = req.body.repassword;

    //用户是否为空
    if(username == ''){
        responseData.code = 1;
        responseData.message = '用户名不能为空';
        res.json(responseData);//转换成json
        return;
    }

    // 密码是否为空
    if(password == ''){
        responseData.code = 2;
        responseData.message = '密码不能为空';
        res.json(responseData);//转换成json
        return;
    }

    // 两次输入的密码必须一致
    if(password != repassword){
        responseData.code = 3;
        responseData.message = '两次输入的密码不一致';
        res.json(responseData);//转换成json
        return;
    }

    //用户名是否已经被注册了，如果数据库中已经存在和我们要注册的用户名同名的数据，表示该用户已经被注册了
    User.findOne({
        username:username
    }).then(function (userInfo) {
        if(userInfo){
            // 表示数据库中有该记录
            responseData.code = 4;
            responseData.message = '用户名已经被注册了';
            res.json(responseData);
            return;
        }
        //保存用户注册的信息到数据库中
        var user = new User({
            username:username,
            password:password
        });
        return user.save();
    }).then(function (newUserInfo) {
        // console.log(newUserInfo);

        responseData.message = '注册成功';
        res.json(responseData);
    });
});

/**
 * 用户登录
 */
router.post('/user/login',function (req,res) {
    var username = req.body.username;
    var password = req.body.password;

    if(username == '' || password == ''){
        responseData.code = 1;
        responseData.message = '用户名和密码不能为空';
        res.json(responseData);
        return;
    }

    //查询数据库中相同用户名喝密码的记录是否存在，如果存在则登录成功
    User.findOne({
        username:username,
        password:password
    }).then(function (userInfo) {
        if(!userInfo){
            responseData.code = 2;
            responseData.message = '用户名或密码错误';
            res.json(responseData);
            return;
        }

        //用户名和密码是正确的
        responseData.message = '登录成功';
        responseData.userInfo = {
            _id:userInfo._id,
            username:userInfo.username
        };

        // 设置cookies
        req.cookies.set('userInfo',JSON.stringify({
            _id:userInfo._id,
            username:userInfo.username
        }));

        res.json(responseData);
        return;
    });
});


/**
 * 退出
 */
router.get('/user/logout',function (req,res) {
    req.cookies.set('userInfo',null);
    res.json(responseData);
});


/**
 *  获取指定文章的所有评论
 */
router.get('/comment',function (req,res,next) {
    // 内容的id
    var contentId = req.query.contentid || '';

    Message.findOne({
        content:contentId
    }).then(function (data) {

        // 读取用户信息
        var cookies = req.cookies.get('messageInfo');
        var cookiesJson;
        var result = {};
        if(!(cookies == undefined)){
            cookiesJson = JSON.parse(cookies);
            result.username = new Buffer(cookiesJson.username, 'base64').toString();
            result.email = cookiesJson.email;
            result.url = cookiesJson.url;
            result.isChecked = cookiesJson.isChecked;
        }

        // 判断文章下是否有评论
        if(data == '' || data == null){//没有评论
            responseData.cookiesJson = result;
            res.json(responseData);
        }else{//有评论
            responseData.data = data.messages;
            responseData.cookiesJson = result;
            res.json(responseData);
        }
    })

    // (保留，不能删除（旧版：评论在文章下））
    // // 内容的id
    // var contentId = req.query.contentid || '';
    //
    // //查询当前这篇内容的信息
    // Content.findOne({
    //     _id:contentId
    // }).then(function (content) {
    //     responseData.data = content.comments;
    //     res.json(responseData);
    // });
});


/**
 * 提交评论
 */
router.post('/comment/postComment',function (req,res,next) {

    // 文章的id
    var contentId = req.body.contentid || '';

    //查询当前这篇内容的信息
    var messageData = {
        username:req.body.username,
        content:req.body.content,
        reference:req.body.reference,
        email:req.body.email,
        url:req.body.url,
        isChecked:req.body.isChecked,
        postTime:new Date(),
    };

    if(messageData.content == ''){
        responseData.code = 1;
        responseData.message = '留言不能为空~';
        res.json(responseData);//转换成json
        return;
    }
    if(messageData.username == ''){
        responseData.code = 2;
        responseData.message = '您的大名不能为空~';
        res.json(responseData);//转换成json
        return;
    }
    if(messageData.email == ''){
        responseData.code = 3;
        responseData.message = '电子邮件不能为空~';
        res.json(responseData);//转换成json
        return;
    }


    Message.findOne({
        content:contentId
    }).then(function (message) {
        if(message){//添加评论
            message.messages.push(messageData);
            return message.save();
        }else{// 文章没有任何评论，进行创建保存
            return new Message({
                content:contentId,
                messages:messageData
            }).save();
        }
    }).then(function (message) {
        responseData.message = '评论成功';
        responseData.data = message;

        // 设置cookies  把中文转换成base64，这样才不会存不住
        req.cookies.set('messageInfo',JSON.stringify({
            username:new Buffer(req.body.username).toString('base64'),
            email:req.body.email,
            url:req.body.url,
            isChecked:req.body.isChecked
        }));

        res.json(responseData);
    })



    // (保留，不能删除（旧版：评论在文章下））
    // // 文章的id
    // var contentId = req.body.contentid || '';
    //
    // console.log('contentId',contentId);
    // var postData = {
    //     username:req.userInfo.username,
    //     postTime:new Date(),
    //     content:req.body.content
    // };
    //
    // //查询当前这篇内容的信息
    // Content.findOne({
    //     _id:contentId
    // }).then(function (content) {
    //     content.comments.push(postData);
    //     return content.save();
    // }).then(function (newContent) {
    //     responseData.message = '评论成功';
    //     responseData.data = newContent;
    //     res.json(responseData);
    // });
});


//返回数据
module.exports = router;